\begin{tikzpicture}[minimum height=0.6cm]
	\node (hws) [apribox, minimum width=2.2cm] {Hardware};
	\node (pls) [apribox, below=1.5mm of hws, minimum width=2.2cm] {Platform};
	\node (spo) [apribox, below=1.5mm of pls, minimum width=2.2cm] {System};

	\node (mrg) [bluebox, below=of spo] {Merger};

	\node (src) [apribox, right=of mrg] {Source Format};

	\node (joi) [bluebox, above=of src] {Joiner};
	\node (cmp) [apribox, above=of joi] {Components};

	\node (spg) [bluebox, right=of cmp] {Specgen};
	\node (cm2) [apribox, right=of spg] {Components};

	\node (exp) [bluebox, right=of src] {Expander};
	\node (fma) [apribox, right=of exp] {Format A};
	\node (alo) [bluebox, right=of fma] {Allocator};
	\node (fmb) [apribox, below=of alo] {Format B};
	\node (val) [bluebox, left=of fmb]  {Validator};
	\node (sge) [bluebox, left=of val]  {Structure Generators};

	\node (spk) [graybox, below=of sge] {Source Specs};
	\node (iob) [graybox, right=of spk] {I/O Bitmaps};
	\node (msc) [graybox, right=of iob, minimum width=1.5cm] {...};
	\node (pta) [graybox, left=of spk] {Page Tables};
	\node (zpa) [graybox, left=of pta] {Zero Page};

	\node (bin) [apribox, below=of spk] {Binaries};

	\node (has) [bluebox, below=of bin] {Hasher};

	\node (sin) [bluebox, below=of has] {Sinfo};

	\node (pak) [bluebox, below=of sin] {Packer};

	\node (img) [apribox, below=of pak] {System Image};

	\draw[arrow] (spo) -- (mrg);

	\draw[arrow] (cmp) -- (joi);
	\draw[arrow] (joi) -- (src);

	\draw[arrow] (spg) -- (cmp);
	\draw[arrow] (cm2) -- (spg);

	\draw[arrow] (mrg) -- (src);
	\draw[arrow] (src) -- (exp);
	\draw[arrow] (exp) -- (fma);
	\draw[arrow] (fma) -- (alo);
	\draw[arrow] (alo) -- (fmb);
	\draw[arrow] (fmb) -- (val);
	\draw[arrow] (val) -- (sge);

	\draw[arrow] (sge) -- (spk);
	\draw[arrow] (sge) -- (iob);
	\draw[arrow] (sge) -- (msc);
	\draw[arrow] (sge) -- (pta);
	\draw[arrow] (sge) -- (zpa);

	\draw[arrow] (spk) -- (bin);

	\draw[arrow] (bin) -- (has);
	\draw[arrow] (has) -- (sin);
	\draw[arrow] (sin) -- (pak);

	\draw[arrow] (msc) -- (pak);
	\draw[arrow] (iob) -- (pak);
	\draw[arrow] (iob) -- (pak);
	\draw[arrow] (pta) -- (pak);
	\draw[arrow] (zpa) -- (pak);

	\draw[arrow] (pak) -- (img);
\end{tikzpicture}
